package hojano6;

/*
 * 19/sep/2012
 */

/**
 *
 * @author Sndrea Magaly Mendoza, 11331
 */
public class Nodo implements Comparable <Nodo>{

    int frequency;
    char character;
    String codigo;
    
   
    /**
     * Constructor del nodo con la frecuencia.
     * pre: -
     * post: Construye un nodo vacio con una frecuencia.
     * @param f 
     */
    public Nodo (int frequency, char c){
        this.codigo = "";
        this.frequency=frequency;
        this.character= c;
    }
    
    /**
     * Constructor del nodo con un caracter.
     * pre: -
     * post: Construye un nodo con el caracter y una frecuencia 1. 
     * @param c 
     */
    public Nodo (char character){
        this.codigo="";
        this.frequency=1;
        this.character=character;
    }
    
    /**
     * Constructor del nodo con una frecuencia.
     * pre: -
     * post: Construye un nodo con el caracter nulo y una frecuencia. 
     * @param frequency 
     */
    public Nodo (int frequency){
        this.codigo="";
        this.frequency=frequency;
        this.character=  '\u0000';
    }
   
    /**
     * Permite obtener la frecuencia.
     * @pre: -
     * @post: Se obtiene la frecuencia del cÃ¡racter.
     * @return 
     */
    public int getFrequency() {
        return frequency;
    }

    /**
     * Establece la frecuencia.
     * @pre: -
     * @post: Se establece una nueva frecuencia.
     * @param frequency 
     */
    public void setFrequency(int frequency) {
        this.frequency = frequency;
    }

    /**
     * Permite obtener el caracter.
     * @pre: -
     * @post: Se obtiene el caracter.
     * @return 
     */
    public char getCharacter() {
        return character;
    }

    /**
     * Permite determinar el caracter.
     * @pre: -
     * @post: Permite determinar el caracter.
     * @param character 
     */
    public void setCharacter(char character) {
        this.character = character;
    }

    /**
     * Permite obtener la representaciÃ³n del cÃ³digo del cÃ¡racter.
     * @pre: -
     * @post: Obtiene el cÃ³digo de la representaciÃ³n.
     * @return codigo
     */
    public String getCodigo() {
        return codigo;
    }

    /**
     * Permite determinar la representaciÃ³n del cÃ³digo del cÃ¡racter.
     * @pre: -
     * @post: Determina el cÃ³digo de la representaciÃ³n.
     * @param codigo
     */
    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }
    
    /**
     * MÃ©todo encargado de la comparaciÃ³n.
     * pre: -
     * post: Regresa -1 si la frecuencia es menor, 0 si es igual o 1 si es mayor.
     * @param o 
     */
    @Override
    public int compareTo(Nodo o) {
        if (this.frequency == o.frequency){
            return 0;
        }else{
            if (this.frequency<o.frequency){
                return -1;
            }else{
                return 1;
            }
        }
    }
    
    /**
     * MÃ©todo que permite determinar si el nodo posee el mismo caracter.
     * @pre: -
     * @post: Determina si los nodos poseen el mismo caracter.
     * @param o
     * @return Verdadero si poseen el mismo caracter.
     */
    public boolean equals(Nodo o){
        if (this.character==o.character){
            return true;
        }else{
            return false;
        }
    }
    
}
